//package com.zhongli.devplatform.service.impl.qq;
//
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.zhongli.devplatform.bean.Res;
//import com.zhongli.devplatform.bean.SecurityHelper;
//import com.zhongli.devplatform.constant.Consts;
//import com.zhongli.devplatform.dto.UserBindDTO;
//import com.zhongli.devplatform.enums.SexType;
//import com.zhongli.devplatform.mapper.clazz.ReadClazzMapper;
//import com.zhongli.devplatform.mapper.sys.ReadRoleMapper;
//import com.zhongli.devplatform.mapper.user.ReadUserInfoMapper;
//import com.zhongli.devplatform.mapper.user.ReadUserMapper;
//import com.zhongli.devplatform.mapper.user.ReadUserRoleMapper;
//import com.zhongli.devplatform.po.common.ReadClazzPO;
//import com.zhongli.devplatform.po.user.ReadRolePO;
//import com.zhongli.devplatform.po.user.ReadUserInfoPO;
//import com.zhongli.devplatform.po.user.ReadUserPO;
//import com.zhongli.devplatform.po.user.ReadUserRolePO;
//import com.zhongli.devplatform.security.qq.QQUserInfo;
//import com.zhongli.devplatform.service.imp.qq.QQRegisterService;
//import com.zhongli.devplatform.utils.user.GenerateID;
//import com.zhongli.devplatform.utils.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.security.crypto.password.PasswordEncoder;
//import org.springframework.stereotype.Service;
//
//import java.util.Objects;
//
///**
// * @author WuXiCheng
// * @version 1.0
// * @date 2020/8/12 10:37
// */
//@Service
//public class QQRegisterServiceImpl implements QQRegisterService {
//
//    @Autowired
//    private ReadUserMapper userMapper;
//
//    @Autowired
//    private ReadUserInfoMapper userInfoMapper;
//
//    @Autowired
//    private ReadRoleMapper roleMapper;
//
//    @Autowired
//    private ReadUserRoleMapper userRoleMapper;
//
//    @Autowired
//    private PasswordEncoder passwordEncoder;
//
//    @Autowired
//    private StringRedisTemplate stringRedisTemplate;
//
//    @Autowired
//    private ReadClazzMapper clazzMapper;
//
//    @Override
//    public void register(QQUserInfo qqUserInfo,String role) {
//        ReadUserPO readUserPO = userMapper.selectOne(new QueryWrapper<ReadUserPO>().eq("qq_id", qqUserInfo.getOpenId()));
//        if (!Objects.isNull(readUserPO)){
//            ReadRolePO rolePO = roleMapper.selectOne(new QueryWrapper<ReadRolePO>().eq("code", role));
//            if (!Objects.isNull(rolePO)){
//                //初始化用户
//                ReadUserPO userPO = new ReadUserPO();
//                userPO.setSoleId(GenerateID.getGenerateID());
//                userPO.setIsDelete(false);
//                userPO.setIsEnable(true);
//                userPO.setAccountNum(StringUtils.getVerifyCode(7));
//                userPO.setPassword(passwordEncoder.encode("123456"));
//                userPO.setQqId(qqUserInfo.getOpenId());
//                userMapper.insert(userPO);
//
//                //初始化用户信息
//                ReadUserInfoPO userInfoPO = new ReadUserInfoPO();
//                userInfoPO.setUserId(userPO.getId());
//                userInfoPO.setNickName(qqUserInfo.getNickname());
//                userInfoPO.setHeadImgUrl(qqUserInfo.getFigureurl_qq_1());
//                Integer sex = "男".equals(qqUserInfo.getGender())? SexType.Male.getCode():SexType.Female.getCode();
//                userInfoPO.setSex(sex);
//                userInfoMapper.insert(userInfoPO);
//                ReadUserRolePO userRolePO = new ReadUserRolePO();
//                switch (role){
//                    case "student":
//                    case "parent":
//                        userRolePO.setRoleId(rolePO.getId());
//                        userRolePO.setUserId(userPO.getId());
//                        userRoleMapper.insert(userRolePO);
//                        break;
//                }
//            }
//        }
//    }
//
//    @Override
//    public Res bindQQUser(UserBindDTO userBindDTO) {
//        // 验证手机号与验证码
//        if (verifyPhoneCode(userBindDTO.getPhone(), userBindDTO.getCode())) {
//            return Res.not_ok("验证码不正确，或已过期");
//        }
//        int code = 1;
//        String message = "绑定失败";
//        Integer userId = SecurityHelper.getCurrentUserId();
//        ReadUserPO userPO = userMapper.selectById(userId);
//        ReadUserInfoPO userInfoPO = userInfoMapper.selectOne(new QueryWrapper<ReadUserInfoPO>().eq("user_id", userId));
//        String role = roleMapper.selectOne(new QueryWrapper<ReadRolePO>().select("code").inSql("id",
//                "SELECT role_id FROM read_user_role WHERE user_id =" + userId)).getCode();
//        switch (role){
//            case "student":
//                ReadClazzPO clazzPO = clazzMapper.selectOne(new QueryWrapper<ReadClazzPO>().eq("invitation_code", userBindDTO.getInvitationCode()));
//                if (!Objects.isNull(clazzPO)){
//                    //绑定学校班级
//                    userPO.setClazzId(clazzPO.getId());
//                    userPO.setSchoolId(clazzPO.getSchoolId());
//                    userPO.setAccountNum(userBindDTO.getPhone());
//                    userMapper.updateById(userPO);
//                    userInfoPO.setPhone(userBindDTO.getPhone());
//                    userInfoMapper.updateById(userInfoPO);
//                    code = 0;
//                    message = "绑定成功";
//                }
//                //绑定手机号
//                break;
//            case "parent":
//                userPO.setAccountNum(userBindDTO.getPhone());
//                userMapper.updateById(userPO);
//                userInfoPO.setPhone(userBindDTO.getPhone());
//                userInfoMapper.updateById(userInfoPO);
//                code = 0;
//                message = "绑定成功";
//                break;
//        }
//        return new Res<>(code,message);
//    }
//
//    /**
//     * 检查验证码是否有效
//     *
//     * @param phone
//     * @param code
//     * @return
//     */
//    private boolean verifyPhoneCode(String phone, String code) {
//        String cacheCode = stringRedisTemplate.opsForValue().get(Consts.PHONE_CODE + phone);
//        if (StrUtil.isBlank(cacheCode) || !StrUtil.equals(cacheCode, code)) {
//            return true;
//        }
//        // 删除该验证码
//        stringRedisTemplate.delete(Consts.PHONE_CODE + phone);
//        return false;
//    }
//}
